package br.com.quad.seguranca.dao;

import java.util.List;

import br.com.quad.dao.HibernateDAO;
import br.com.quad.seguranca.dao.HibernateDAOFactory;
import br.com.quad.seguranca.bean.Grupo;

public class GrupoDAOHibernate implements GrupoDAO {
	
	HibernateDAOFactory hibernateDAOFactory = null;
	HibernateDAO<Grupo> hibernateDAO = null;

	public GrupoDAOHibernate(){
		hibernateDAOFactory = new HibernateDAOFactory();
		hibernateDAO = hibernateDAOFactory.getGrupoDAO();		
	}	
	
	@Override
	public boolean inserir(Grupo grupo) throws Exception {
		boolean ok = false;
		
		try {
			hibernateDAO.add(grupo);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		} 
		return ok;
	}
	
	@Override
	public boolean alterar(Grupo grupo) throws Exception {
		boolean ok = false;

		try {
			hibernateDAO.update(grupo);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		}

		return ok;
	}

	
	@Override
	public boolean excluir(Grupo grupo) throws Exception {
		boolean ok = false;

		try {
			hibernateDAO.remove(grupo);
			ok = true;
		} catch (Exception e) {
			throw new Exception(e.getMessage());
		}

		return ok;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Grupo> getSelecionar(String descricaoPesquisa, int codigoSistema) {
		String 	sql = "FROM Grupo WHERE codigoGrupo <> 0";

		if (!(descricaoPesquisa.isEmpty())) {
			sql += " AND descricao like '" + descricaoPesquisa + "%' ";  
		}

		if (codigoSistema != 0) {
			sql += " AND codigoSistema = " + codigoSistema + " ";  
		}

		sql += " ORDER BY descricao";		
 
		List<Grupo> lista = hibernateDAO.getSession().createQuery(sql).list();

		return lista;
	}

	@Override
	public Grupo getGrupo(int codigoGrupo) {
		return hibernateDAO.get(codigoGrupo);
	}

	@Override
	public List<Grupo> getListarTodos() {
		return hibernateDAO.listAll();
	}	

	@Override
	public void inicialize(Grupo grupo) {
		Grupo g = DAOFactory.getGrupoDAO().getGrupo(grupo.getCodigoGrupo());
		g.getAreas();
		grupo.setAreas(g.getAreas());
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public boolean isExiste(Grupo grupo) {
		String 	sql = 	"FROM Grupo " +
						"WHERE descricao	= '"+ grupo.getDescricao() + "' AND " +
						"		codigoGrupo != '" + grupo.getCodigoGrupo() + "'";

		List<Grupo> lista = hibernateDAO.getSession().createQuery(sql).list();
		
		if (lista.size()<1) {
			return false;
		} else {
			return true;
		}
	}
	
	@Override
	public boolean isExclusaoLiberada(Grupo grupo) {
		// TODO Auto-generated method stub
		return false;
	}

}
